package com.company.ljh.medium;

import java.util.*;

/**
 * 784.给定一个字符串 s ，通过将字符串 s 中的每个字母转变大小写，我们可以获得一个新的字符串。
 *
 * 返回 所有可能得到的字符串集合 。以 任意顺序 返回输出。
 * 输入：s = "a1b2"
 * 输出：["a1b2", "a1B2", "A1b2", "A1B2"]
 */
public class 字母大小写全排列 {
    public List<String> letterCasePermutation(String s) {
        List <String>result = new ArrayList<String>();
        char[] arrays = s.toCharArray();
        int n = s.length();
        backTrance(n,"",result,arrays,0);
        return result;
    }
    private void backTrance(int n,String temp,List<String> result,char[]arrays,int index){
        if(index == n){
            result.add(temp);
            return;
        }
        //因为字母只有大小写两种情况，因此只递归两次
        if(arrays[index] >= 'A' && arrays[index] <='Z'){
            String str = temp+(char)(arrays[index]+32);
            backTrance(n,str,result,arrays,index+1);
        }
        if(arrays[index] >= 'a' && arrays[index] <='z'){
            String str = temp+(char)(arrays[index]-32);
            backTrance(n,str,result,arrays,index+1);
        }
        //数字只递归一次
        //数字只递归一次
        String str = temp+(arrays[index]);
        backTrance(n,str,result,arrays,index+1);
    }
}
